package com.swn.common.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 该类为进行数据格式操作的工具类
 * @author taozhaocai
 */

public class DataTran {
	private static String AmtFmt = "#,##0.00####";

	/**
	 * 将金额转化成按千分位的显示格式
	 * @parm double 金额
	 * @return String 显示字符串
	 */
	public static String amtTranShow(double amt) {
		DecimalFormat df = new DecimalFormat(AmtFmt);
		return df.format(amt);
	}

	/**
	 * 将金额转化成按千分位的显示格式
	 * @parm String 金额
	 * @return String 显示字符串
	 */
	public static String amtTranShow(String amt) {
		double damt = Double.parseDouble(amt);
		return amtTranShow(damt);
	}

	/**
	 * 将按千分位的显示格式金额字符串转化成正常金额字符串
	 * @parm String 千分位显示金额字符串
	 * @return String正常金额字符串
	 */
	public static String amtTranBack(String amt) {
		String sRetAmt = amt;
		int idx = sRetAmt.indexOf(',');
		while (idx != -1) {
			sRetAmt = sRetAmt.substring(0, idx) + sRetAmt.substring(idx + 1);
			idx = sRetAmt.indexOf(',');
		}
		if (sRetAmt.equals(""))
			sRetAmt = "0.00";
		return sRetAmt;
	}

	public static double strToDouble(String amt) {

		return Double.parseDouble(DataTran.amtTranBack(amt));
	}

	public static float strToFloat(String amt) {

		return Float.parseFloat(DataTran.amtTranBack(amt));
	}

	/**
	 * 该方法将double类型的数据转换成6位的邮政编码
	 * @param code 邮政编码的double类型数据表示
	 * @return String 邮政编码字符串
	 */
	public static String getPostCode(double code) {
		String str =
			(new java.text.DecimalFormat("########")).format(code) + "";
		if (str.length() < 6) {
			while (str.length() != 6) {
				str = "0" + str;
			}
		} else if (str.length() > 6) {
			str = str.substring(0, 6);
		}
		return str;
	}

	/**
	 * 该方法实现将利率换算为年利率
	 * @param flag 0为年;1为月;2为日
	 * @param unt 换算单位值为:100/1000/10000
	 * @param i 利率值
	 * @return

	 */
	public static double changeYearRate(int flag, int unt, double rate) {
		if (flag == 0) {
			rate = (rate / unt) * 100;
		}
		if (flag == 1) {
			rate = (rate / unt) * 12 * 100;
		}
		if (flag == 2) {
			rate = (rate / unt) * 360 * 100;
		}
		String str = (new java.text.DecimalFormat("#.######")).format(rate);
		rate = Double.parseDouble(str);
		return rate;

	}

	/**
	 * 该方法实现将金额四舍五入精确到分
	 * @param i 需要四舍五入的金额
	 * @return  精确到分的金额
	 */
	public static double moneyTran(double i) {
		return DataTran.round(i, 2);
	}

	/**
	 * 该方法实现将利率转换为小数点6位
	 * @param i
	 * @return 精确到后的利率
	 */
	public static double rateTran(double i) {
		return DataTran.round(i, 6);
	}
	
	
	/**
	 * 
	 * 提供精确的小数位四舍五入处理。
	 * @param v 需要四舍五入的数字
	 * @param scale 小数点后保留几位
	 * @return 四舍五入后的结果
	 *  
	 */
	public static double round(double v, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException("The scale must be a positive integer or zero");
		}
		BigDecimal b = new BigDecimal(Double.toString(v));
		BigDecimal one = new BigDecimal("1");
		return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}


	/**
	 * 检测函数
	 */
	public static void main(String args[]) {
		double i = changeYearRate(0, 100, 5.000000499995);
		System.out.println("i is:::::" + i);
		double j = moneyTran(0.205);
		System.out.println("j is:::::" + j);
		
		System.out.println(rateTran(1.4444444444444444));

//		String str =
//			(new java.text.DecimalFormat("#.######")).format(0.799999999) + "";
//		System.out.println("str is ::::" + str);
//		double a = Math.rint(1.223);
//		System.out.println("a is ::::" + a);
//		System.out.println(DataTran.amtTranShow(4232134.6755));
//		System.out.println(DataTran.amtTranBack("3,345,234.0967"));
//
//		System.out.println(DataTran.strToDouble("3,345,234.0967"));
//
//		System.out.println(getPostCode(0.0));
//		System.out.println(getPostCode(8976.0));
//		System.out.println(getPostCode(88888.0));
//		System.out.println(getPostCode(12345678.0));

	}
}